#ifndef MULTIBAND_H
#define MULTIBAND_H

#include <stdint.h>

#define NUM_BANDS 6

// 频段枚举
typedef enum {
    BAND_SUBSONIC = 0,  // 0-10Hz: 超低频惯性
    BAND_SUSPENSION,     // 10-15Hz: 悬挂运动  
    BAND_BODY_ROLL,      // 15-25Hz: 车身侧倾
    BAND_ROAD_TEXTURE,   // 25-40Hz: 路面纹理
    BAND_SURFACE_DETAIL, // 40-100Hz: 表面细节
    BAND_ULTRASONIC      // 100Hz+: 超高频
} FrequencyBand;

// 预设模式
// typedef enum {
//     PRESET_BALANCED = 0,  // 平衡模式
//     PRESET_DETAIL,        // 细节增强
//     PRESET_COMFORT,       // 舒适模式  
//     PRESET_RACE           // 竞速模式
// } EQPreset;

// 双二阶滤波器结构
typedef struct {
    float b0, b1, b2;    // 分子系数
    float a1, a2;        // 分母系数
    float w0, w1;        // 延迟线状态
    float gain;          // 频段增益
} biquad_filter_t;

// 多频段处理器主结构
typedef struct {
    biquad_filter_t bands[NUM_BANDS];
    uint32_t sample_count;
    //EQPreset current_preset;
} realtime_multiband_t;

// 函数声明
void init_6band_equalizer(realtime_multiband_t *processor);
float process_6band_optimized(realtime_multiband_t *p, float x);
void set_band_gain(realtime_multiband_t *processor, FrequencyBand band, float gain);
// void apply_eq_preset(realtime_multiband_t *processor, EQPreset preset);
const char* get_band_description(FrequencyBand band);
void print_eq_status(realtime_multiband_t *processor);
void adaptive_eq_control(realtime_multiband_t *processor, float vehicle_speed);

#endif // MULTIBAND_H